package com.cx.utils;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @ClassName: Test
 * @Description:测试数据库链接是否正常
 * @Author: cx
 * @Date: 2024/2/21 10:19
 **/
@Component
public class DatabaseTester {
    private final SqlSessionFactory sqlSessionFactory;



/*在Spring框架中，@Autowired注解用于自动装配bean。
也就是说，Spring会自动将匹配的bean注入带有@Autowired注解的属性、构造器、setter方法或配置方法。

在你给出的代码片段中，@Autowired注解用于构造器 DatabaseTester(SqlSessionFactory sqlSessionFactory)，Spring会自动找到一个SqlSessionFactory类型的bean，
并调用这个构造器创建DatabaseTester对象。

这段代码的作用是：在创建DatabaseTester对象时，自动从Spring容器中获取一个SqlSessionFactory对象，并赋值给DatabaseTester对象的 sqlSessionFactory属性。

这是一种常见的依赖注入方式，可以使你的代码更加解耦，更易于测试和维护。*/
    @Autowired
    public DatabaseTester(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    public boolean testConnection() {
        try (SqlSession session = sqlSessionFactory.openSession()) {

//            检查数据库链接是否有效 0表示等待时间无限制
            return session.getConnection().isValid(15);
        } catch (Exception e) {
            return false;
        }
    }

}
